<?php
require_once '../Generique/header_complet.php';
require_once "../Securite/protection_CSRF.php";
$bdd = ouvrirBase();
?>
<!-- CORPS -->

<?php
//notifications de la page
$notification = "";

// seul quelqu'un de loguer peut faire des opérations sur son compte
if(isset($_SESSION['statut'], $_SESSION['nom']) && ($_SESSION['statut'] == "moderateur"  || 
$_SESSION['statut'] == "ecrivain" || $_SESSION['statut'] == "administrateur") )
{
	echo '<h1>' . $_SESSION['nom'] . '</h1>';
	$formulaire = true;
	if(isset($_POST['tokenGererCompte']))
	{
		if(verifier_token(600, 'Pages/gererCompte.php', 'operations_compte', 'tokenGererCompte'))
		{
			// les différents formulaires d'opérations
			if(isset($_POST['changerPseudo']) )	// formulaire pour changer son pseudo
			{
				$formulaire = false;
			?>	
				<form method="post" action="">
					<p>
					
						<label for="nouveauPseudo" > nouveau pseudo </label> <input type ="text"	id ="nouveauPseudo"	value = "<?php echo $_SESSION['nom']?>" name = "nouveauPseudo"/>  <br /><br />
						<label for="mdp" > mot de passe </label> <input type ="password"	id ="mdp"	value = "" name = "MDPactuel"/>  <br /><br />
						<?php
						$token = generer_token('operations_compte');
						echo '<input type = "hidden" value="'.$token.'" name="tokenGererCompte" />
						';	?>	
						<input type="submit" value="changer de pseudo" name="pseudoChange" /><br /><br />
					</p>
				</form>	
				<form method = "post" action ="">
					<p> <br /> <br /><input type = "submit" value = "annuler" /></p>
				</form>
			<?php
			}
			else if (isset($_POST['changerMDP']) )// formulaire pour changer son mot de passe
			{
				$formulaire = false;
			?>
				<form method="post" action="">
					<p>
						<?php
						$token = generer_token('operations_compte');
						echo '<input type = "hidden" value="'.$token.'" name="tokenGererCompte" />
						';	?>	
						<label for="mdpActu" > mot de passe actuel  </label>  <input type ="password"	id= "mdpActu"	value = "" name = "MDPactuel" />  <br /><br />
						<label for="nouveauMDP" > nouveau mot de passe  </label>  <input type ="password"	id="nouveauMDP"	value = "" name = "nouveauMDP"/>  <br /><br />
						<label for="nouveauMDP_bis" > retaper  </label>  <input type ="password"	id="nouveauMDP_bis"	value = "" name = "nouveauMDP_bis" />  <br /><br />
						<input type="submit" value="changer de mot de passe " name="MDPChange" /><br /><br />
					</p>
				</form>	
				<form method = "post" action ="">
					<p> <br /> <br /><input type = "submit" value = "annuler" /></p>
				</form>
			<?php
			}
			
			else if (isset($_POST['changerMail']) ) // formulaire pour changer de mail
			{
				$formulaire = false;
			
				$mail="";
				$req = $bdd->prepare('SELECT mail FROM dil_comptes WHERE pseudo = :pseudo');
				$req->bindValue('pseudo',$_SESSION['nom'], PDO::PARAM_STR);
				$req->execute();
				$result = $req->fetch();
				$mail = $result['mail'];
				echo "<br /><br />adresse mail : $mail <br /><br />";
				?>
			
				<form method="post" action="">
					<p>
						<?php
						$token = generer_token('operations_compte');
						echo '<input type = "hidden" value="'.$token.'" name="tokenGererCompte" />
						';	?>	
						<label for="mdpActu" > mot de passe  </label>  <input type ="password"	id= "mdpActu"	value = "" name = "MDPactuel" />  <br /><br /><br />
						<input type ="text"		value = "<?php echo $mail ?>" name = "nouveauMail" />  
						<input type="submit" value="changer de mail" name="mailChange" /><br /><br />
					</p>
				</form>	
				<form method = "post" action ="">
					<p> <br /> <br /><input type = "submit" value = "annuler" /></p>
				</form>
			<?php
			}
			
			
			else if (isset($_POST['suppressionCompte']) ) // demande de suppression son compte
			{
				$formulaire = false;
				?>
				<h3> Cette action est irr&eacute;versible,<br /> &ecirc;tes-vous bien s&ucirc;r de vouloir supprimer votre compte ? <br /></h3>
				<form method="post" action="optionsSuppression.php">
					<p>
						<?php
						$token = generer_token('operations_compte');
						echo '<input type = "hidden" value="'.$token.'" name="tokenGererCompte" />
						';	?>	
						<label for="mdpActu" > mot de passe  </label>  <input type ="password"	id= "mdpActu"	value = "" name = "MDPactuel" />  <br /><br />
						<input type ="submit" value = "confirmer" name = "confirmeSuppression" />  
					</p>
				</form>
				<form method = "post" action ="">
					<p> <br /> <br /><input type = "submit" value = "annuler" />
				</p></form>
			<?php
			}
			
			
			else
			{	

				$formulaire = false;		// traitement des formulaires
			
					// changement de mail
				 if(isset($_POST['nouveauMail'], $_POST['mailChange'], $_POST['MDPactuel']) )	
				{	
					$req = $bdd->prepare('SELECT password, salt_prefixe, salt_suffixe FROM dil_comptes WHERE pseudo = :pseudo');
					$req->bindValue('pseudo',$_SESSION['nom'], PDO::PARAM_STR);
					$req->execute();
					$result = $req->fetch();
					
					if(sha1($result['salt_prefixe'].$_POST['MDPactuel'].$result['salt_suffixe']) ==  $result['password'] )
					{
						if(filter_var($_POST['nouveauMail'], FILTER_VALIDATE_EMAIL) !== false) {
						
							
							require_once "../Login/tailles_autorisees.php";	// vérification que le mot de passe est valide
							$tailles = get_tailles_autorisees();
							if(strlen($_POST['nouveauMail']) < $tailles['maxMail'] )
							{				
								$req = $bdd->prepare('UPDATE dil_comptes SET mail = :mail WHERE pseudo = :pseudo ');
								$req->bindValue('mail',$_POST['nouveauMail'], PDO::PARAM_STR);
								$req->bindValue('pseudo',$_SESSION['nom'], PDO::PARAM_STR);
								$req->execute();
								$notification =  '<br />mail chang&eacute;';
							}
							else
								$notificatin = ' <br /> Veuillez entrer une adresse mail de moins de '.$tailles['maxMail'].' caract&egrave;res';
						}
						else
							$notification = '<br />mail invalide';
					}
					else
						$notification =  "le mot de passe entr&eacute; n'est pas le bon";
					
				}
				
				// traitement de la demande de changement de mot de passe
				else if(isset($_POST['nouveauMDP_bis'], $_POST['nouveauMDP'], $_POST['MDPChange'], $_POST['MDPactuel']) )
				{
				
					$formulaire = false;
					$req = $bdd->prepare('SELECT password, salt_prefixe, salt_suffixe FROM dil_comptes WHERE pseudo = :pseudo');
					$req->bindValue('pseudo',$_SESSION['nom'], PDO::PARAM_STR);
					$req->execute();
					$result = $req->fetch();
					
					if(sha1($result['salt_prefixe'].$_POST['MDPactuel'].$result['salt_suffixe']) ==  $result['password'] )
					{
						require_once "../Login/tailles_autorisees.php";	// vérification que le mot de passe est valide
						$tailles = get_tailles_autorisees();
						if(strlen ($_POST['nouveauMDP']) < $tailles['minMotPasse'])
							$notification =  "mot de passe trop court";
					
						else if($_POST['nouveauMDP'] !== $_POST['nouveauMDP_bis'])
							$notification =  'mot de passe diff&eacute;rents';
						
						else
						{
							$salt_pre="";
							$salt_suf="";
							for($i = 0; $i<3; $i++)
							{
								$salt_pre .=mt_rand(0,9);
								$salt_suf .=rand(0,9);
							}
							$req = $bdd->prepare('UPDATE dil_comptes SET salt_prefixe = :prefixe, salt_suffixe = :suffixe, 
							password = :mdp WHERE pseudo = :pseudo');
							$req->bindValue('prefixe',$salt_pre, PDO::PARAM_STR);
							$req->bindValue('suffixe',$salt_suf, PDO::PARAM_STR);
							$req->bindValue('mdp',sha1($salt_pre.$_POST['nouveauMDP'].$salt_suf), PDO::PARAM_STR);
							$req->bindValue('pseudo',$_SESSION['nom'], PDO::PARAM_STR);
							$req->execute();
							$notification =  'Le mot de passe a bien &eacute;t&eacute; modifi&eacute;';
						}
					}
					else
						$notification =  "le mot de passe entr&eacute; n'est pas le bon";
				}
				else if(isset($_SESSION['pseudoChange']) )
				{	// le pseudo vient d'être changé
					$notification = 'Votre pseudo a bien &eacute;t&eacute; modifi&eacute; '.$_SESSION['nom'];
					unset ($_SESSION['pseudoChange']);
					
					$formulaire = false;
				}
				
				// traitement de la demande de changement de pseudo
				else if (isset($_POST['nouveauPseudo'], $_POST['pseudoChange'], $_POST['MDPactuel'] ) )
				{
					$formulaire = false;
				
					$req = $bdd->prepare('SELECT password, salt_prefixe, salt_suffixe FROM dil_comptes WHERE pseudo = :pseudo');
					$req->bindValue('pseudo',$_SESSION['nom'], PDO::PARAM_STR);
					$req->execute();
					$result = $req->fetch();
					
					if(sha1($result['salt_prefixe'].$_POST['MDPactuel'].$result['salt_suffixe']) ==  $result['password'] )
					{
					
						require_once "../Login/tailles_autorisees.php";
						require_once "../Securite/parser_chaines.php";
						$tailles = get_tailles_autorisees();
						if( strlen($_POST['nouveauPseudo']) > $tailles['maxLogin'])
							$notification =  "pseudo trop long";
						else if( strlen($_POST['nouveauPseudo']) < $tailles['minLogin'])
							$notification =  "pseudo trop court";
						else if($_POST['nouveauPseudo'] != securite_chaine($_POST['nouveauPseudo']))
							$notification =  'Veuillez ne pas entrer de caract&egrave;re sp&eacute;cial dans le pseudo';
						else
						{			
							$req = $bdd->prepare('SELECT COUNT(pseudo) FROM dil_comptes WHERE pseudo = :newPseudo');
							$req->bindValue('newPseudo', $_POST['nouveauPseudo'], PDO::PARAM_STR);
							$req->execute();
							$result = $req->fetch();
							if( $result['COUNT(pseudo)'] == 1 )
								$notification =  ' pseudo déjà existant';
								
								// toutes les  conditions sont remplies pour changer de pseudo
							else
							{
								// changements dans les tables sql
								$req = $bdd->prepare('UPDATE dil_comptes SET pseudo = :newPseudo WHERE pseudo = :pseudo');
								$req->bindValue('newPseudo', $_POST['nouveauPseudo'], PDO::PARAM_STR);
								$req->bindValue('pseudo', $_SESSION['nom'], PDO::PARAM_STR);
								$req->execute();
								$req = $bdd->prepare('UPDATE dil_chapitres SET pseudo = :newPseudo WHERE pseudo = :pseudo');
								$req->bindValue('newPseudo', $_POST['nouveauPseudo'], PDO::PARAM_STR);
								$req->bindValue('pseudo', $_SESSION['nom'], PDO::PARAM_STR);
								$req->execute();
								$req = $bdd->prepare('UPDATE dil_histoires SET pseudoAuteur = :newPseudo WHERE pseudoAuteur = :pseudo');
								$req->bindValue('newPseudo', $_POST['nouveauPseudo'], PDO::PARAM_STR);
								$req->bindValue('pseudo', $_SESSION['nom'], PDO::PARAM_STR);
								$req->execute();
								$req = $bdd->prepare('UPDATE dil_marquepages SET pseudo = :newPseudo WHERE pseudo = :pseudo');
								$req->bindValue('newPseudo', $_POST['nouveauPseudo'], PDO::PARAM_STR);
								$req->bindValue('pseudo', $_SESSION['nom'], PDO::PARAM_STR);
								$req->execute();
								$req = $bdd->prepare('UPDATE dil_reviews SET pseudo = :newPseudo WHERE pseudo = :pseudo');
								$req->bindValue('newPseudo', $_POST['nouveauPseudo'], PDO::PARAM_STR);
								$req->bindValue('pseudo', $_SESSION['nom'], PDO::PARAM_STR);
								$req->execute();
								$req = $bdd->prepare('UPDATE dil_moderation SET moderateur = :newPseudo WHERE moderateur = :pseudo');
								$req->bindValue('newPseudo', $_POST['nouveauPseudo'], PDO::PARAM_STR);
								$req->bindValue('pseudo', $_SESSION['nom'], PDO::PARAM_STR);
								$req->execute();
								
								$_SESSION['nom']=$_POST['nouveauPseudo'];		// on modifie la variable de session
								$_SESSION['pseudoChange']=true;
								header("Location: gererCompte.php");
							}
						}
					}
					else
						$notification =  "le mot de passe entr&eacute; n'est pas le bon";
					
					
				}
			}
		}
	}

	if($formulaire )
	{
	// choix de l'opération à effectuer
		?><br />
		
		<form method="post" action="">
			<p><?php
				$token = generer_token('operations_compte');
				echo '<input type = "hidden" value="'.$token.'" name="tokenGererCompte" />
				';				
				?>
				<input type="submit" value="changer de pseudo" name="changerPseudo" /><br /><br />
				<input type="submit" value="changer de mot de passe" name="changerMDP" /><br /><br />
				<input type="submit" value="changer d'adresse mail" name="changerMail" /><br /><br />
				<input type="submit" value="supprimer le compte" name="suppressionCompte" /><br /><br />
				
			</p>
		</form>		
<?php
	}
}
else
{
	$notification = "<p>Veuillez vous identifier pour acc&eacute;der &agrave cette page</p>";
}

//ZONE DE NOTIFICATION : pour l'affichage des différentes notifications
echo '<div id="notification">';
	echo $notification;
echo '</div>';

?>
<?php include("../Generique/pied.php"); ?>
